/**
  ******************************************************************************
  * @file           : power_ctrl_drv.h
  * @author         : Tessia
  * @brief          : None
  * @attention      : None
  * @date           : 2024/3/20
  ******************************************************************************
  */



#ifndef SENTRY_CHASSIS_POWER_CTRL_DRV_H
#define SENTRY_CHASSIS_POWER_CTRL_DRV_H

#include "cmsis_os.h"
#include "communicate_task.h"

typedef struct {
    float Buffer;           //缓冲能量
    float Judge_Limit;      //裁判系统限制
    float NowPower;         //实际功率
    float LimitedPower_Now; //自我设定限制功率
    float powerall_ax ;     //功率环参数
    float powerall_bx ;     //功率环参数
#if USE_SEPERATE_POWER == 0
    float k;                //输出电流限制系数
    float kk;	            //I项系数     kk的偏大和偏小都会导致实际功率随此时电机转速变化而变化，无法稳定在定值     //7
#elif USE_SEPERATE_POWER == 1
    float k[4];
    float kk[4];
#endif
    float R ;		        //I^2项系数   R越大功率阶跃效应越差  R越小精度会偏低                          //0.00001
    float kp_Kincrease;     //调整kk的系数 使kk的数值能正好稳定在想要的功率 //原值是0.01
    float kp_Kincrease2;
    float K_Power_Buffer;
    float upHill_k[4];
}ChassisPowerDataStruct;


void ChassisWheelControl(float *wheel_current_speed_array, float *wheel_vel_pid_out_array);
void power_param_init();

#ifdef __cplusplus
extern "C" {
#endif
//C

#ifdef __cplusplus
}
#endif
//C++

#endif //SENTRY_CHASSIS_POWER_CTRL_DRV_H
